package avicit.bdp.dgs.standard.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.dgs.standard.dto.DataElementDto;
import avicit.bdp.dgs.standard.vo.DataElementDistributionVo;
import avicit.bdp.dgs.standard.vo.StandardApprovalStaticsVo;
import avicit.bdp.dgs.standard.vo.StandardPieVo;
import com.github.pagehelper.Page;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * @author mayi 数据元数据操作层
 */
@Repository
public interface DataElementDao extends BaseDAO<DataElementDto> {

  /**
   * 查询分页列表
   *
   * @param typeIdList 分类ID
   * @param keyWords 查询关键词
   * @param status 状态
   * @param wordSecretList
   * @return 分页列表
   */
  Page<DataElementDto> getPageList(
      @Param("typeIdList") List<String> typeIdList,
      @Param("idList") List<String> idList,
      @Param("keyWords") String keyWords,
      @Param("status") Integer status,
      @Param("wordSecretList") List<String> wordSecretList);

  int batchUpdate(@Param("list") List<DataElementDto> updateList);

  List<StandardPieVo> statusStatics();

  /**
   * 查询折线图数据
   *
   * @param pattern 时间格式 : 按天统计：DATE_FORMAT(start_time,'%Y%m%d') 按周统计：DATE_FORMAT(start_time,'%Y%u')
   *     按月统计：DATE_FORMAT(start_time,'%Y%m')
   * @param startTime 统计开始时间
   * @param endTime 统计结束时间
   * @return 折线图数据
   */
  List<StandardApprovalStaticsVo> getStateLineChartData(
      @Param("pattern") String pattern,
      @Param("startTime") String startTime,
      @Param("endTime") String endTime,
      @Param("endIndex") Integer endIndex);

  Page<DataElementDistributionVo> getDistributionList(
      @Param("dataElementId") String dataElementId,
      @Param("dataSourceId") String dataSourceId,
      @Param("metadataId") String metadataId,
      @Param("keyWords") String keyWords);

  int dataElementDistribute(
      @Param("dataElementId") String dataElementId,
      @Param("metadataColumnList") List<String> metadataColumnList);

  int dataElementDistributeRemove(
      @Param("dataElementId") String dataElementId,
      @Param("metadataColumnList") List<String> metadataColumnList);
}
